package edu.zut.controller;


import edu.zut.pojo.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;

/**
 * @Controller :标注在类上，标明当前类是一个控制器，能处理请求以及响应
 * 当前类会以控制器的身份加载到容器中
 * @RequestMapping("/user"): 标注在类上时，表示路劲窄化
 */
@Controller
@RequestMapping("/user")
public class IndexController {

    /**
     * @return 返回字符串，此时表示的是跳转 的url
     * @RequestMapping :标注在方法上时，表示当前能处理的具体请求
     * path = value 表示映射路劲   method：表示请求方式
     */
//    @RequestMapping(path = "/login",method = RequestMethod.POST)
    public String userLogin(HttpServletRequest request) {
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        System.out.println("name = " + name);
        System.out.println("password = " + password);
        //重定向到某个资源
        return "redirect:/success.html";
    }

    /**
     * 通过处理方法的形参接收请求参数
     * 形参的名称和请求参数key保持一致，类型兼容,自动封装请求参数
     * 如果请求参数不存在，就返回null
     */
//    @RequestMapping(path = "/login",method = RequestMethod.POST)
    public String userLogin2(String name, String password) {
        System.out.println("name = " + name);
        System.out.println("password = " + password);
        //重定向到某个资源
        return "redirect:/success.html";
    }

    /**
     * 通过处理方法的形参接收请求参数
     * 形参的名称和请求参数key保持不一致？
     *
     * @RequestParam: 进行参数的手动绑定  要求请求参数中必须包含此参数
     * 如果请求可能不包含这个参数，设置required = false
     */
    @RequestMapping(path = "/login", method = RequestMethod.POST)
    public String userLogin3(@RequestParam(name = "name", required = false) String username, @RequestParam(name = "password") String psw) {
        System.out.println("name = " + username);
        System.out.println("password = " + psw);
        //重定向到某个资源
        return "redirect:/success.html";
    }

    /**
     * 通过实体 Bean 接收请求参数
     * 请求参数的名称和Bean的属性名保持一致，类型兼容,set方法生成
     * @Valid: 利用validation进行服务端的数据自动校验
     * @GetMapping : 基于get请求的url映射
     */
    @GetMapping("/register")
    public String userRegister(@Valid UserInfo userInfo) {
        System.out.println("userInfo = " + userInfo);
        //转发到成功页面
        return "forward:/success.html";
    }

    /**
     * 从请求路劲中解析请求参数  {}  占位符
     * @PathVariable 进行请求参数的绑定
     */
    @GetMapping("/details/{num1}/{b}")
    public String details(@PathVariable String num1, @PathVariable(name = "b") String num2) {
        System.out.println("num1 = " + num1);
        System.out.println("num2 = " + num2);
        //url跳转时，不写关键字，默认转发
        return "/success.html";
    }


    /**
     * 同步请求中，映射请求的方法，返回值：void、String、对象、集合
     * String ： 表示的url跳转
     *  重定向：redirect
     *  转发：forward
     */
    @GetMapping("/toRegister")
    public String toRegister(){
        //重定向到注册页面
        return "redirect:/register.html";
    }


    /**
     * 请求：同步   异步
     * 异步交互中，如何接收请求参数？
     *
     */


}
